'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.03
 * lastUpdateDate：2018.02.03
 * description：let / const的基本用法和区别
 */

/**
  * 1.var是属于函数级别作用域变量的声明，它是会提升到整个函数级别之上或全局的
  * 2.let是属于块级作用域变量的声明，只能在当前声明的块级作用域内或当前声明
  *   的子级的块级作用域访问
  */

// 临时失效区
// var a = 12;
// function fn () {
//     console.log(a);
//     /**
//      * 在一个函数内部如果跟全局作用域内如果同时定义了两个相同的变量a，
//      * 那么这时候内部函数的这个变量a将把全局作用域的变量a进行失效，又
//      * 由于var定义的变量是会进行js预解析的，所以此时a的结果是undefined，如下：
//      * function fn () {
//      *     var a;
//      *     console.log(a);
//      *     a = 5;
//      * }
//      * 这个要理解好
//      */
//     var a = 5;
// }
//
// fn ();

var a = 12;
function fn () {
    console.log(a);
    /**
      * 在一个函数内部如果跟全局作用域内如果同时定义了两个相同的变量a，
      * 那么这时候内部函数的这个变量a将把全局作用域的变量a进行失效，又
      * 由于let定义的变量是不存在js预解析的，所以此时a的结果是a is not defined
      * 这个要理解好
      */
    let a = 5;
}

fn ();
